/*
 * @lc app=leetcode.cn id=453 lang=javascript
 *
 * [453] 最小操作次数使数组元素相等
 */

// @lc code=start
/**
 * @param {number[]} nums
 * @return {number}
 */
var minMoves = function(nums) {
  // 1. 计算 n - 1 个数加 1 是困难的，但是计算一个数减 1 是相对轻松的。
  // 2. 不需要考虑说减到多少才能保证大家都相等，可以考虑相对变换。
  // 3. 仅需要计算将所有数字都减小到最小值即可
  // 4. 更进一步避免溢出，可以直接计算每个数与最小值的累差

  const minNum = Math.min(...nums);
  return nums.reduce((total, current) => total += current - minNum, 0);
};
// @lc code=end

